package com.tutu.utils;

import org.apache.commons.codec.binary.Base64;

import java.io.*;
import java.util.Objects;

/**
 * 将图片转换为Base64
 * 将base64编码字符串解码成img图片
 */
public class Img2Base64Util {

    /**
     * 将图片转换成Base64编码
     *
     * @param imgFile 待处理图片
     * @return 返回结果
     */
    public static String getImgStr(String imgFile) {
        // 将图片文件转化为字节数组字符串，并对其进行Base64编码处理
        return new String(Objects.requireNonNull(Base64.encodeBase64(fileToByteArray(imgFile))));
    }

    /*
     * 1、图片读取到字节数组中
     * 	  1）、图片到程序		FileInputStream
     *    2）、程序到字节数组   ByteArrayOutputStream
     */
    public static byte[] fileToByteArray(String filePath) {
        // 1、创建源与目的地
        File src = new File(filePath);

        // 2、选择流
        InputStream is = null;

        // 有新增方法不能发生多态
        ByteArrayOutputStream baos;

        try {
            is = new FileInputStream(src);
            baos = new ByteArrayOutputStream();
            // 3、操作(分段读取)
            byte[] flush = new byte[1024 * 10];// 缓冲容器
            int len = -1;// 接收长度
            try {
                while ((len = is.read(flush)) != -1)
                    // 写出到字节数组中
                    baos.write(flush, 0, len);

                baos.flush();

                // 返回回来，上面调用时就有了
                return baos.toByteArray();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            // 4、释放资源
            try {
                if (null != is) is.close();
            } catch (IOException e) {
                e.printStackTrace();

            }
        }

        return null;
    }
}